home *** CD-ROM | disk | FTP | other *** search
- * right.s
- * 右スクロール / 最高速 = 5
- * by Mitsuky
-
-
- SPEED_MAX equ 5
-
- .offset 8 * 引き数
- _source_ptr: .ds.l 1
- _dest_ptr: .ds.l 1
- _speed: .ds.l 1
- _vdisp: .ds.l 1
-
-
-
- CRTC_R12 equ $e8_0018 * スクロールX
- CRTC_R14 equ $e8_001c
- CRTC_R16 equ $e8_0020
- CRTC_R18 equ $e8_0024
-
-
- .text
- .even
-
- .dc.b 'WL10',$0d,$0a
- .dc.b '右スクロール / 最高速 = 5',$0d,$0a
- .dc.b ' by Mitsuky',$0d,$0a
- .dc.b $1a
- .even
-
- right:
- link a6,#0
- movem.l d1-d7/a0-a5,-(sp)
-
- move.l _speed(a6),d0 * d0.w =
- bmi right_ask_speed
- cmpi.l #SPEED_MAX,d0
- bhi right_err
-
- tst.l _vdisp(a6)
- bmi right_ask_vdisp
-
-
-
- moveq.l #1,d1
- lsl.w d0,d1
- swap.w d1 * d1.l = 1回当たりのスクロール値
-
- moveq.l #1,d5
- lsl.w d0,d5
- move.l #512,d7
- add.w d5,d7
- swap.w d7 * d7.l = スクロール座標
- subq.w #1,d5 * d5.w = V-SYNC 当たりのループ回数-1
-
- move.w #512,d6
- lsr.w d0,d6
- subq.w #1,d6 * d6.w = ループ回数-1
-
- moveq.l #-2,d3
- asl.w d0,d3
- addi.w #1024*16,d3 * d3.w = (下に解説有り)
-
- moveq.l #-2,d2
- asl.l d0,d2
- addi.l #1024*512,d2 * d2.l = (下に解説有り)
-
- movea.l _source_ptr(a6),a3 * a3.l = 転送元アドレス
- movea.l _dest_ptr(a6),a4 * a4.l = 転送先アドレス
-
-
- loop:
- bsr vdisp
-
- move.l d7,CRTC_R12
- move.l d7,CRTC_R14
- move.l d7,CRTC_R16
- move.l d7,CRTC_R18
-
- moveq.l #512/16-1,d0
- loop_y1:
- move.w d5,d4 * d5.w =
- loop_y2:
- move.w (a3),(a4)
- move.w 1024*1(a3),1024*1(a4)
- move.w 1024*2(a3),1024*2(a4)
- move.w 1024*3(a3),1024*3(a4)
- move.w 1024*4(a3),1024*4(a4)
- move.w 1024*5(a3),1024*5(a4)
- move.w 1024*6(a3),1024*6(a4)
- move.w 1024*7(a3),1024*7(a4)
- move.w 1024*8(a3),1024*8(a4)
- move.w 1024*9(a3),1024*9(a4)
- move.w 1024*10(a3),1024*10(a4)
- move.w 1024*11(a3),1024*11(a4)
- move.w 1024*12(a3),1024*12(a4)
- move.w 1024*13(a3),1024*13(a4)
- move.w 1024*14(a3),1024*14(a4)
- move.w 1024*15(a3),1024*15(a4)
- addq.w #2,a3
- addq.w #2,a4
- dbra d4,loop_y2
-
- adda.w d3,a3 * d3.w = 1024*16-2*(1回に描画するX)
- adda.w d3,a4
- dbra d0,loop_y1
- add.l d1,d7
- suba.l d2,a3 * d2.l = 1024*512-2*(1回に描画するX)
- suba.l d2,a4
- dbra d6,loop
-
-
- right_rts:
- moveq.l #0,d0
- right_rts_2:
- movem.l (sp)+,d1-d7/a0-a5
- unlk a6
- rts
-
-
- **** ****
- vdisp:
- movem.l a0,-(sp)
- move.l _vdisp(a6),a0
- jsr (a0)
- movem.l (sp)+,a0
- rts
-
-
- **** ****
- right_err:
- moveq.l #-1,d0
- bra right_rts_2
-
-
- **** ****
- right_ask_speed:
- moveq.l #SPEED_MAX,d0
- bra right_rts_2
-
-
- **** ****
- right_ask_vdisp:
- move.l _speed(a6),d0
- lea.l ask_vdisp_table(pc),a0
- add.w d0,d0
- move.w (a0,d0.w),d0
- bra right_rts_2
-
- ask_vdisp_table:
- .dc.w 512,256,128,64,32,16